package com.browsesoft.resource;

import java.util.LinkedList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import com.browsesoft.EntityManager;
import com.browsesoft.ExtendElement;
import com.browsesoft.ManagerGroup;
import com.browsesoft.Tools;
import com.browsesoft.htmlcomponent.HTMLBasicComponent;
import com.browsesoft.htmlcomponent.HTMLTableModel;

/**
 * 显示资源列表
 */
public class ResourceTableModel implements HTMLTableModel {
	/**
	 * 父资源ID
	 */
	private String ID = null;

	/**
	 * 所有资源列表
	 */
	private LinkedList resources = null;

	/**
	 * 初始化model
	 */
	public void init(HttpServletRequest request) throws Exception {
		// 得到父资源ID
		ID = request.getParameter("point");
	}

	/**
	 * 得到列数
	 * 
	 * @return 列数
	 */
	public int getColumnCount() {
		return 3;
	}

	/**
	 * 得到列的名称
	 * 
	 * @param index
	 *            列号
	 * @return 列的名称
	 */
	public String getColumnName(int index) {
		String[] tableHead = { "资源名称", "修改", "删除" };
		return tableHead[index];
	}

	/**
	 * 得到列的英文名
	 * 
	 * @param index
	 *            列号
	 * @return 列的英文名
	 */
	public String getColumnEname(int index) {
		return "";
	}

	public Object getDatas() {
		return null;
	}

	/**
	 * 得到行数
	 * 
	 * @return 行数
	 */
	public int getRowCount() {
		return resources.size();
	}

	/**
	 * 设置传递的参数
	 * 
	 * @param request
	 */
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		EntityManager entitymanager = (EntityManager) ManagerGroup
				.getManagerGroup().getManager("entity");
		// 如果没有点击资源树
		if (ID == null) {
			resources = Tools.iteratorToList(entitymanager.getRoot().getChildren());
		} else {
			// 根据参数取得资源
			Resource resource = (Resource) entitymanager.getObject(ID);
			if (resource == null) {
				return;
			}
			// 取得资源的所有子
			resources = Tools.iteratorToList(resource.getChildren());
		}
	}

	/**
	 * 得到某列的操作类型
	 * 
	 * @return 类型
	 */
	public String getType(int col) {
		String[] types = { "td", "modify", "delete" };
		return types[col];
	}

	/**
	 * 修改单元值
	 */
	public void modifyCellValue(Element td, Document doc, int row, int col) {
		// 根据行数取得资源
		Resource resource = (Resource) resources.get(row);
		if (col == 0) {
			// 如果列数等于0替换了列元素
			ExtendElement.replaceElementContext(td, doc
					.createTextNode((String) resource.getAttributes().get(
							"name")));
		} else if (col == 1) {
			Element e = (Element) ExtendElement
					.findElements(td, "type", "link").get(0);
			String str = e.getAttribute("onclick");
			str = str.replaceAll("templatename=", "templatename="
					+ resource.getTemplateName());
			str = str.replaceAll("id=", "id=" + resource.getID());
			e.setAttribute("onclick", str);
		} else if (col == 2) {
			Element e = (Element) ExtendElement
					.findElements(td, "type", "link").get(0);
			// 取得属性
			String str = e.getAttribute("onclick");
			str = str.replaceAll("id=", "id=" + resource.getID());
			e.setAttribute("onclick", str);
		}
	}

	/**
	 * 设置模型所对应的组件
	 * 
	 * @param component
	 *            对应的组件
	 */
	public void setComponent(HTMLBasicComponent component) {
	}

	/**
	 * 模型更新页面元素
	 * 
	 * @throws Exception
	 */
	public void updatePageElement(HTMLBasicComponent c) throws Exception {
	}

	/**
	 * 设置条件
	 */
	public void setCondition(String condition) {
	}
}